package cn.hcbycloud.common.core.service.tree.impl;

import cn.hcbycloud.common.core.service.tree.TreeService;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.ReflectUtil;

import java.lang.reflect.Field;
import java.util.List;

/**
 * @author gaoh
 * @desc 树形数据生成接口实现类
 * @date 2022年01月22日 下午 11:21
 */
public class TreeServiceImpl<T, V> implements TreeService<T, V> {

    /**
     * 如果不想全部字段可以按照下面的写法添加
     * tree.putExtra("id", object.getId());
     * tree.putExtra("parentId", object.getParentId());
     * tree.putExtra("cityName", object.getCityName());
     */
    @Override
    public List<Tree<V>> buildTreeList(List<T> list, TreeNodeConfig config, V parentId) {
        List<Tree<V>> build = TreeUtil.build(list, parentId, config, (object, tree) -> {
            // 也可以使用 tree.setId(object.getId());等一些默认值
            Field[] fields = ReflectUtil.getFieldsDirectly(object.getClass(), true);
            for (Field field : fields) {
                String fieldName = field.getName();
                Object fieldValue = ReflectUtil.getFieldValue(object, field);
                tree.putExtra(fieldName, fieldValue);

            }
        });
        return build;
    }
}